home *** CD-ROM | disk | FTP | other *** search
- --------------------------------------
- Advanced Shadow Warrior Mapping Topics
- Written By Keith Schuler
- (c) 1997 3D Realms Entertainment
- --------------------------------------
-
- This briefly documents some of the more advanced topics in Shadow Warrior
- mapping. Almost all of these are demonstrated to some degree in EXAMPLE.MAP
- (found on your Shadow Warrior CD in the \GOODIES\TOOLS directory).
-
- Refer to these documents in the \GOODIES\DOC directory on your Shadow
- Warrior CD for other important information:
-
- ADVANCED.TXT - Brief explanations of room-over-room, sector objects, and
- other advanced Shadow Warrior mapping topics.
- EDITART.TXT - Instructions and reference for using the EDITART program.
- EXAMPLE.TXT - Documentation to accompany EXAMPLE.MAP, which includes
- demonstrations of almost all of Shadow Warrior's map functionality.
- SLABSPRI.TXT - Instructions and reference for using the SLABSPRI program.
- SWSOUNDS.TXT - An index of the sound effects and ambient sounds.
- SPRITAGS.TXT - Sprite tagging reference. Your guide to all the special
- sprites in Shadow Warrior and how to use them.
- SWBUILD.TXT - A tutorial and reference guide to using the BUILD editor.
- WALLTAGS.TXT - Wall and sector tagging reference. These are all the wall and
- sector tags used in Shadow Warrior.
- -----------------------------------------------------------------------------
-
- Timing Vators 1
- Room-Over-Room 2
- How It Works 2.1
- BOUND_FLOOR_BASE_OFFSET and BOUND_FLOOR_OFFSET 2.1.1
- VIEW_LEVEL1 and VIEW_LEVEL2 2.1.2
- The Floor Mirror 2.1.3
- The Rules Of Construction 2.2
- BOUND_FLOOR_BASE_OFFSET and BOUND_FLOOR_OFFSET 2.2.1
- VIEW_THRU_FLOOR and VIEW_THRU_CEILING 2.2.2
- VIEW_LEVEL1 and VIEW_LEVEL2 2.2.3
- Raising ceilings and lowering floors 2.2.4
- Z heights and overlap 2.2.5
- Advanced Room-Over-Room 3
- Visible Ceilings And Floors 3.1
- Translucent Water 3.2
- Sloping Room-Over-Room 3.3
- Sector Objects 4
- Rules of construction 4.1
- The Wall Loop 4.1.1
- The Bounding Box 4.1.2
- The Center Sector Lotag 4.1.3
- The Center Sector Hitag 4.1.4
- Sector Object Limitations 4.1.5
- What Can You Do With It 4.2
- Follow A Track 4.2.1
- Auto Turret 4.2.2
- Driveables 4.2.3
- Bind It Across Floors 4.2.4
- SWSAVE 5
-
- ---------------------
- 1. Timing Vators
- ---------------------
-
- Timing vators can be used to time events, cause things to happen after a
- pause, or whatever. A timing vator is usually just a small sector somewhere
- that the player can't get into. A SECT_VATOR (hitag 92) ST1 in the sector
- has a TAG6 match equal to the event you want to trigger. Adjust the speed or
- height of the vator to make a longer or shorter timer. Examples of timing
- vators exist in almost every map of Shadow Warrior.
-
- ----------------------
- 2. Room-Over-Room
- ----------------------
-
- Room-Over-Room is the most significant feature of Shadow Warrior. It allows
- for building genuinely 3-dimensional areas by placing one layer of sectors
- over another, and allowing players and sprites to pass freely between the
- two layers. It is, admittedly, a hack, and as such several rules of
- construction must be followed in order for it to work at all. This being
- the case, we'll start off by explaining what the heck the BUILD engine is
- doing to produce this effect anyway.
-
- 2.1 How It Works:
-
- The BUILD engine is sector based, which means every sector must have walls,
- a ceiling, and a floor. Sectors can overlap each other, but these
- overlapping sectors can never see each other, or the view becomes garbled.
-
- 2.1.1 BOUND_FLOOR_BASE_OFFSET and BOUND_FLOOR_OFFSET
-
- These two ST1's (hitags 202 and 203, respectively) are used to drag
- groups of sectors over top of each other at premap. The BASE_OFFSET
- serves as an "anchor point." The next OFFSET processed is moved to
- the same x,y location as the BASE_OFFSET, dragging every sector
- connected to it along for the ride.
-
- 2.1.2 VIEW_LEVEL1 and VIEW_LEVEL2
-
- Let's assume for now that the player will be viewing the lower
- layer (level 1) from within the upper layer (level 2). That's when
- the VIEW_LEVEL1 (hitag 110) ST1 kicks in. Behind the scenes,
- VIEW_LEVEL1 causes Shadow Warrior to draw level 1 as though the
- player were standing in it, but with one difference: the ceiling
- is moved up really, really high. If the player had been instead
- standing in the lower layer (level 1) and looking up at level 2,
- then the VIEW_LEVEL2 (hitag 111) sprite does a similar action.
- Behind the scenes, VIEW_LEVEL2 causes Shadow Warrior to draw level
- 2 as though the player were standing in it, but with one
- difference, the floor is moved down really, really low.
-
- 2.1.3 The Floor Mirror
-
- Okay, so behind the scenes, we've drawn this weird looking area with
- a really high ceiling or low floor. Now Shadow Warrior draws the
- layer that the player is actually standing in, but it doesn't draw
- anything where the floor mirror is. The "floor mirror" (tile #341)
- is a special texture used expressly for this purpose. Because
- Shadow Warrior didn't draw anything where the floor mirror was, the
- scene appears to "see through" it into the other layer. That's the
- image that the player sees on the screen at the next refresh.
-
- 2.2 The Rules Of Construction
-
- 2.2.1 BOUND_FLOOR_BASE_OFFSET and BOUND_FLOOR_OFFSET
-
- As stated above, these are necessary in order to drag one level over
- the other. The lotag is the order in which they are processed, so
- you'd set a BASE_OFFSET first, with a lotag of 0. Then you'd set up
- all the OFFSETS you wanted to align to that BASE_OFFSET.
-
- 2.2.2 VIEW_THRU_FLOOR and VIEW_THRU_CEILING
-
- One VIEW_THRU_CEILING (hitag 120) ST1 must be placed in a sector in
- level 1 with a floor mirror texture on the ceiling. The lotag is a
- view match tag, and must be the same as the lotag for the
- VIEW_THRU_FLOOR sprite, as well as all the VIEW_LEVEL1 and
- VIEW_LEVEL2 sprites in the room-over-room area. One VIEW_THRU_FLOOR
- (hitag 121) ST1 must be place in a sector in level 2 with a floor
- mirror texture on the floor, again, the lotag must be the same as
- the VIEW_THRU_CEILING sprite. Both of the VIEW_THRU sprites must be
- in the same relative positions in their respective sectors. Any
- sectors in level 1 with a floor mirror texture must be congruent
- to their matching sectors in level 2.
-
- 2.2.3 VIEW_LEVEL1 and VIEW_LEVEL2
-
- These VIEW sprites are responsible for the actual drawing of room
- over room, so there must be one in every sector where the player
- can see the other level. Remember how the first area is drawn as
- though the player's view were there, with the ceiling pushed up?
- This means that there must be valid player space in level 1
- everywhere the player can view it from level 2. This means that if
- a player is standing anywhere in level 2, he cannot be standing over
- "null space" in level 1. Also note that the VIEW_LEVEL sprites
- should always be angled downward in 2D mode.
-
- 2.2.4 Raising ceilings and lowering floors
-
- Because Shadow Warrior temporarily alters ceiling and floor heights
- in room over room areas, two side effects will occur. The first is
- that you can never see the ceiling of level 1 from level 2, nor see
- the floor of level 2 from level 1. The second is that wall textures
- will move depending on whether they are oriented to the ceiling or
- floor. Keep this in mind when constructing your room over room areas.
-
- 2.2.5 Z heights and overlap
-
- Level 1 and level 2 must be constructed with proper Z heights,
- because Shadow Warrior won't do it for you. By this I mean that the
- floor of level 2 must actually be higher than the ceiling of level 1.
- The difference between the two is called the "overlap." At least
- some overlap is necessary for room over room to behave correctly.
- To build overlap correctly, follow these guidelines:
-
- 1> The height of the floor mirror (on the ceiling) in level 1
- must be the exact same as the height of the -floor- (not
- the floor mirror) in level 2.
- 2> The height of the floor mirror in level 2 must be the
- same as the height of the -ceiling- (not the floor mirror)
- in level 1.
-
-
- -------------------------------
- 3. Advanced Room-Over-Room
- -------------------------------
-
- Confused by room over room yet? Now let's move on the exceptions and special
- cases!
-
- 3.1 Visible Ceilings And Floors
-
- Above, we stated that you can never see the floor of level 2 from
- level 1, and you can never see the ceiling of level 1 from level 2.
- We lied. In $SHRINE.MAP, you can see sloping floors in level 2
- from level 1 out in front of the temple. In $AUTO.MAP you can see
- a car on the floor of level 2 from level 1. This is a special
- trick, and you'll need to look at those maps to see how its done.
- Here are some guidelines:
-
- 1> You must use two sets of VIEW_LEVEL and VIEW_THRU tags. Depending
- on the sector, some VIEW_LEVEL tags will be turned "on" (pointing
- down) and some will be turned "off" (pointing up.)
- 2> The player can only see the floor/ceiling from the sector with
- the floor mirror texture, so be sure to construct your area
- accordingly.
- 3> The player cannot see the floor/ceiling and see more floor mirror
- on the other side. It just won't work.
-
- 3.2 Translucent Water
-
- To do this, build level 1 like any room over room area, but tag it
- to be water, too, by placing a SECT_UNDERWATER (hitag 8) sprite in
- there. The floor mirror sector is the sector you can enter and
- exit the water from. The floor mirror sector in level 2 should not
- have a DIVE_SECTOR (hitag 7) sprite, but it will need a
- FLOOR_Z_ADJUST (hitag 98) with a lotag of 40. This allows the player
- to wade along the surface without "falling" underwater. Use a
- CEILING_FLOOR_PIC_OVERRIDE (hitag 136) to give the water a texture.
-
- NOTE: This technique was also used to create reflective or masked
- floors in Shadow Warrior.
-
- 3.3 Sloping Room-Over-Room
-
- Yes, it can be done. Look at $AIRPORT.MAP for an example.
-
-
- ----------------------
- 4. Sector Objects
- ----------------------
-
- A "sector object" is a group of connected sectors that operate as a unit.
- Driveables, amoebas, turrets, and numberous other things can be built using
- sector objects.
-
- 4.1 Rules of construction:
-
- 4.1.1 The Wall Loop
-
- Any sector object must be entirely surrounded by an unbroken
- "wall loop." This means that no line can connect a vertex on the wall
- loop to a vertex within the sector object. One line of this wall loop
- must have a lotag set to TAG_WALL_LOOP_OUTER (walltag 504).
-
- 4.1.2 The Bounding Box
-
- Every sector must have two SECT_SO_BOUNDING (hitag 500-600) ST1. One
- sprite (BOUND_SO_UPPER) is placed in the upper left corner of the
- sector object, while the other (BOUND_SO_LOWER) is placed in the
- lower right corner. These two sprites form an imaginary rectangle.
- Place these sprites so that this "imaginary rectangle" is large
- enough to contain the entire outer wall loop plus any sprites you
- want to move with the sector object. For sector object #0, the
- BOUND_SO_UPPER sprite is hitag 500, and the BOUND_SO_LOWER sprite
- is hitag 501. For sector object #1, use 505 and 506, respectively.
- Sector object #2 uses 510 and 511. This continues all the way up
- to sector object #19, which uses hitags 595 and 596.
-
- 4.1.3 The Center Sector Lotag
-
- Every sector object must contain one and only one sector tagged as
- its "center sector." This determines the center point around which
- the sector object will pivot. The lotag of the center sector will
- always be the same as the hitag of the sector object's
- BOUND_SO_LOWER sprite. So, sector object #0 uses 501, #1 uses 506,
- #2 uses 511, and so on all the way up to sector object #19, which
- has a center sector lotag of 596.
-
- 4.1.4 The Center Sector Hitag
-
- The sector hitag of the center sector is the track # that the
- sector object will follow. See SPRITAGS.TXT for a description of
- track sprites. If you don't want the sector object to follow a
- track, set the hitag to -1. Other special cases include: 95 for a
- killable sector object, 96 for an auto-turret, and 98 for a
- driveable.
-
- 4.1.5 Sector Object Limitations
-
- You can have up to twenty (0-19) sector objects in a map. Each
- sector object can contain up to 30 sectors.
-
- 4.2 What Can You Do With It?
-
- 4.2.1 Follow A Track
-
- This is the most common use of a sector object. Set the hitag equal
- to a track # and make the thing wander around. See SPRITAGS.TXT
- to find out what you can do with tracks.
-
- 4.2.2 Auto Turret
-
- Set the center sector hitag to 96, then put an AUTO_TURRET (hitag 81)
- ST1 in the center sector. Put in a SO_ANGLE (hitag 16) to tell it
- which way is the front, and then the sector object will always turn
- to track the movement of the player. Add a SHOOT_POINT and the
- auto-turret will shoot at the player.
-
- 4.2.3 Driveables
-
- Set the center sector hitag to 98, then put in a SECT_OPERATIONAL
- (hitag 1) and a SO_ANGLE and your sector object can now be driven
- around by the player. It can never leave the sector surrounding the
- wall loop, though, so keep that in mind.
-
- 4.2.4 Bind It Across Floors
-
- If you want to place a sector object in water or in room over room
- areas, you're going to want a "bottom" that moves with the top
- half of the SO. This can be done pretty easily with
- BOUND_FLOOR_BASE_OFFSET and BOUND_FLOOR_OFFSET. If the sector object
- finds itself in a BOUND_FLOOR area, it will automatically try to
- find its other half in the matching BOUND_FLOOR area. All the
- secondary part needs is a wall loop tagged with 504 or 508, and
- it will move as a unit. See rooms FB,FC, FE, and FF in EXAMPLE.MAP.
-
- --------------
- 5. SWSAVE
- --------------
-
- SWSAVE is a powerful and convenient debugging feature of Shadow Warrior. We
- found it to be immensely useful for finding stacked sector walls that don't
- match up, as well other odd uses. While in the game, press "T" and type in
- "SWSAVE" just like a cheat code. The program will save the map in its
- current state as SWSAVE.MAP, which you can then load into BUILD.
- BOUND_FLOOR_OFFSET dragging will have taken place, so you'll see room over
- room area sectors in their actual positions during the game.
-